#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> x;
bool can_place(int k){
    for(int j=0;j<k;j++){
        if(x[k]==x[j]||abs(k-j)==abs(x[k]-x[j])) return false;
    }
    return true;
} 

bool is_duichen(const vector<int>& m){
    for(int i=0;i<n;i++){
        if(m[i]!=m[n-1-i]){
            return true;
        }
    }
    return false;
}

void dfs(int k){
    if(k==n){
        if(is_duichen(x)){
            for(int i=0;i<n;i++) cout<<x[i]<<" ";
            cout<<endl; 
        }
        return;
    }
    for(int i=0;i<n;i++){
        x[k]=i;
        if(can_place(k)){
            dfs(k+1);
        }
    }
}

int main(){
    cin>>n;
    x.resize(n);
    for(int i=0;i<n/2;i++){
        x[0]=i;
        dfs(1);
    }
    return 0;
}

